package com.ruoyi.contract.domain;

import com.baomidou.mybatisplus.annotation.*;

import java.io.*;
import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.lettuce.core.dynamic.annotation.Key;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;

/**
 * 
 * @TableName CON_RULE
 */
@TableName(value ="CON_RULE")
@Data
@KeySequence(value = "SEQ_CON_RULE")
public class ConRule implements Serializable {
    /**
     * 计费规则ID
     */
    @TableId(type = IdType.INPUT)
    private Long ruleId;

    /**
     * 合同ID
     */
    private Long conId;

    /**
     * 规则引擎 ICE_BASE ID 
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED,jdbcType = JdbcType.NUMERIC)
    private Long iceId;

    /**
     * 项目类型 S_PROJECT ID
     */
    private Long projectId;

    /**
     * 币种 字典 CURRENCY
     */
    private String currency;

    /**
     * 税率
     */
    private BigDecimal taxRate;

    /**
     * 创建人
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;

    /**
     * 修改人
     */
    @TableField(fill = FieldFill.UPDATE)
    private String updateBy;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date updateTime;

    /**
     * 逻辑删除
     */
    private String delFlag;

    /**
     * 项目类型
     */
    private String projectType;

    /**
     * 是否使用计费引擎 Y 是 N 否
     */
    private String isAuto;

    /**
     * 不使用计费引擎时 单价
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED,jdbcType = JdbcType.NUMERIC)
    private BigDecimal unitPrice;

    /**
     * 自动计费结果保留小数位数
     */
    private BigDecimal decimalNum;

    /**
     * 自动保留小数方法 0 四舍五入 1向上取整 2向下取整
     */
    private String decimalMethod;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    @TableField(exist = false)
    private String projectTypeName;

    @TableField(exist = false)
    private String projectFeeName;

    /**
     * 深拷贝
     * @return 新的ConRule对象
     */
    public ConRule deepCopyConRule() {
        ConRule conRule = null;
        try {
            // 将该对象序列化成流，因为写在流里的是对象的一个拷贝，而原对象仍然存在于JVM里面。所以利用这个特性可以实现对象的深拷贝
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);
            // 将流序列化成对象
            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            conRule = (ConRule) ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return conRule;
    }
}